package com.subject.shuati.domain.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池的config管理
 */
@Configuration
public class ThreadPoolConfig {

    @Bean(name = "labelThreadPool")
    /**
     * 获取具有自定义线程名称的线程池执行器
     *
     * @return 返回一个ThreadPoolExecutor实例，该实例配置了特定数量的核心和最大线程数、空闲线程存活时间、工作队列大小，
     *         使用了自定义线程工厂来命名线程，并且当所有工作队列和线程都被使用时，会由调用者运行被丢弃的任务
     */
    public ThreadPoolExecutor getLabelThreadPool() {
        // 定义线程池时，明确指出了核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂和拒绝策略
        return new ThreadPoolExecutor(20, 100, 5,
                TimeUnit.SECONDS, new LinkedBlockingDeque<>(40),
                new CustomNameThreadFactory("label"),
                new ThreadPoolExecutor.CallerRunsPolicy());
    }

}
